安裝 Pyenv (macOS) 需要輸入下面的指令
brew update
brew install pyenv
其中也會有下載相依的套件:
brew install openssl readline sqlite3 xz zlib
並且依照官方文件教學設定
一般安裝後會在家目錄下產出 .pyenv
的資料夾,其中包含 versions
, shims
和plugins
,分別會放的內容如下:
versions
資料夾會放置下載的所有 Python 版本
shims
是 pyenv 用於截取使用者呼叫 python 的相關指令,並且將其所附帶的參數一併帶入至 pyenv 執行,shims
路徑會被加入至 PATH
環境變數當中
plugins
資料夾下放置的是 pyenv 相關的插件如管理虛擬環境的 pyenv-virtualenv
、檢查安裝環境需求是否有誤的 pyenv-doctor
等。
pyenv init
啟動 shims 及自動補全的功能在官方文件中有提到,若希望可以讓 shell 啟動 shims 及有自動補全的功能,需要將 pyenv init
指令加入到 shell 配置 (configuration file)中
echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.bash_profile
若是 zsh 的話會需要輸出至
.zshrc
請注意,由於 pyenv init
會改變 PATH
環境變數的內容,使 shell 應該要優先使用 ~/.pyenv/shims
內的指令,請確認該指令位於配置檔案的最下方
完成後,可以重新啟動 shell
讓 PATH
的路徑改變可以重新載入:
exec "$SHELL"
pyenv init -
會輸出一些 shell 指令,例如在 zsh 下呼叫下會輸出:(可參考原始碼)
export PATH="/Users/xxxx/.pyenv/shims:${PATH}"
export PYENV_SHELL=zsh
source '/usr/local/Cellar/pyenv/1.2.20/libexec/../completions/pyenv.zsh'
command pyenv rehash 2>/dev/null
pyenv() {
local command
command="${1:-}"
if [ "$#" -gt 0 ]; then
shift
fi
case "$command" in
rehash|shell)
eval "$(pyenv "sh-$command" "$@")";;
*)
command pyenv "$command" "$@";;
esac
}
其中做了以下的事情:
PATH
環境變數,使其加入 ${PYENV_ROOT}/shims/
,讓之後的指令可以優先選擇 shims 中的指令執行PYENV_SHELL
環境變數,此變數將會於pyenv rehash
及 pyenv shell
使用pyenv
自動補全腳本pyenv rehash
安裝 shimspyenv install
安裝 Python接著可以輸入 pyenv install <python_version>
來下載想要的 Python 版本,例如想要下載 3.8.0 版的話可以輸入:
pyenv install -v 3.8.0
-v
代表會輸出冗長模式說明其中安裝的執行內容,除此以外也可以透過 pyenv install --list
顯示全部可以下載的 Python 版本,可以再透過 grep
輸出想要的版本有哪些
pyenv global <python_version>
設定全域的 Python 版本舉例來說,輸入 pyenv global 3.8.0
將會設定全域的 Python 版本為 3.8.0,設定後也可以輸入 pyenv global
來確認當前設定的 Python 版本為何。另外設定過後也可以在 .pyenv
上看到多出一個 version
的檔案,其內容為當前設定的全域 Python 版本
pyenv local <python_version>
設定區域的 Python 版本舉例來說,輸入 pyenv local 3.8.0
將會設定區域的版本為 3.8.0,設定後也同樣可以輸入 pyenv local
來確認當前設定的區域 pyenv 版本為何,並且在設定的該目錄下,可以看到一個 .python-version
檔案,其內容會是該區域的 Python 版本
pyenv versions
顯示已經安裝的 Python 版本透過輸入 pyenv versions
可以輸出已經下載的所有 Python:
$ pyenv versions
system
* 3.8.0 (set by /Users/xxx/.pyenv/version)
3.8.5
pyenv versions
會顯示當下 local 或 global 的所使用的 Python 版本,括號內容為 Python 來源位置,另外若輸入 pyenv version
則不會顯示全部的 Python 可用版本,並只顯示當前使用的 Python 版本,且本地會優先於全域的版本。
pyenv which <command>
得知目前的 command 來源舉例來說,pyenv which pip3
會顯示當前使用的 pip3
來的來源會是哪個,可能會是系統的 /usr/local/bin/pip3
或是 /Users/xxxx/.pyenv/versions/3.8.0/bin/pip3
等,端看自己透過 pyenv
選用的 Python 版本決定,與 which pip3
差別在於,which pip3
會回傳的是 ~/.pyenv/shims
下的 pip3
而無從得知 pyenv
選擇的版本為何。
pyenv uninstall <python_version>
解除安裝指定的 Python 版本假設要刪除 Python 3.8.5 的話,只需要輸入 pyenv uninstall 3.8.5
,則 pyenv 會刪除 ~/.pyenv/versions/3.8.5